home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / defoma / libdefoma-app.pl < prev    next >
Text File  |  2006-06-17  |  4KB  |  178 lines

  1. my $ProcessID = $$;
  2. my $Arg0 = $ARG0;
  3.  
  4. sub com_app {
  5.     usage_and_exit if (@ARGV == 0);
  6.  
  7.     my $command = shift;
  8.     my $app = shift(@ARGV);
  9.     my $upapp = ($command eq 'update') ? $app : undef;
  10.     my @category = @ARGV;
  11.     my @ocategory = @category;
  12.  
  13.     arg_check($app) || exit ERROR;
  14.  
  15.     mylock(1);
  16.     init_all($upapp);
  17.  
  18.     my $appinfo = &Debian::Defoma::Configure::get_app_info($app);
  19.  
  20.     unless($appinfo) {
  21.     term_all();
  22.     mylock(0);
  23.     printw("$app: Application not found.");
  24.     exit ERROR;
  25.     }
  26.  
  27.     my @cs = &Debian::Defoma::Configure::get_app_categories($app);
  28.     @cs = reverse(@cs);
  29.     @category = @cs unless (@category);
  30.  
  31.     unless (exists($appinfo->{ignore_category})) {
  32.     $appinfo->{ignore_category} = {};
  33.     }
  34.     my $ics = $appinfo->{ignore_category};
  35.  
  36.     my $clean = 1;
  37.     my $update = 0;
  38.     my $purge = 0;
  39.     my $onlyupdate = 0;
  40.     my $reexec = 0;
  41.     my $ignore = 0;
  42.     my $cleanstr = "Cleaning up";
  43.     
  44.     if ($command eq 'purge') {
  45.     $Debian::Defoma::Id::Purge = 1;
  46.     @category = @cs;
  47.     $purge = 1;
  48.     $cleanstr = "Purging";
  49.     } elsif ($command eq 'update') {
  50.     my $ppid = $ENV{DEFOMA_PREVIOUS_PROCESS_ID} || 0;
  51.     if ($ppid != $ProcessID) {
  52.         $update = 1;
  53.         if ($appinfo->{script_change} eq 'updated') {
  54.         $reexec = 1;
  55.         }
  56.     } else {
  57.         $onlyupdate = 1;
  58.         $clean = 0;
  59.     }
  60.     } elsif ($command eq 'ignore') {
  61.     $ignore = 1;
  62.     }
  63.  
  64.     if ($update) {
  65.     printm("Updating font configuration of $app...");
  66.     } elsif ($clean) {
  67.     printm("$cleanstr font configuration of $app...");
  68.     }
  69.  
  70.     my $fobjs = \%Debian::Defoma::Font::Fobjs;
  71.     my $fobj;
  72.     my @hints;
  73.     my @list;
  74.     my ($c, $max, $i, $font);
  75.  
  76.     foreach $c (@cs) {
  77.     next unless ($clean);
  78.     next unless (grep($_ eq $c, @category));
  79.     if (exists($ics->{$c})) {
  80.         printm("Skipping category $c; it's ignored.");
  81.         next;
  82.     }
  83.  
  84.     printm("$cleanstr category $c..");
  85.  
  86.     next unless (exists($fobjs->{$c}));
  87.  
  88.     $fobj = $fobjs->{$c};
  89.  
  90.     @list = keys(%{$fobj->{cache_list}});
  91.     foreach $font (@list) {
  92.         @hints = split(' ', $fobj->{cache_list}->{$font});
  93.  
  94.         printv(" $cleanstr $font...");
  95.  
  96.         &Debian::Defoma::Configure::call_1($fobj, $app, 'unregister', $c,
  97.                            $font, @hints);
  98.  
  99.         $fobj->remove_failed($font, $app);
  100.     }
  101.     }
  102.  
  103.     if ($reexec) {
  104.     term_all();
  105.     
  106.     &Debian::Defoma::Configure::remove_script($app);
  107.     $ENV{DEFOMA_PREVIOUS_PROCESS_ID} = $ProcessID;
  108.  
  109.     mylock(0);
  110.     
  111.     exec($Arg0, ARGS);
  112.     }
  113.  
  114.     if (($update || $onlyupdate) && @ocategory) {
  115.     my @rics;
  116.     foreach $c (@ocategory) {
  117.         if (exists($ics->{$c})) {
  118.         delete($ics->{$c});
  119.         push(@rics, $c);
  120.         }
  121.     }
  122.     if (@rics) {
  123.         printm("Releasing 'ignore' on following categories: @rics");
  124.     }
  125.     }
  126.  
  127.     if ($ignore) {
  128.     foreach $c (@category) {
  129.         $ics->{$c} = undef;
  130.     }
  131.     printm("Setting 'ignore' on following categories: @category");
  132.     }
  133.     
  134.     @cs = reverse(@cs);
  135.     foreach $c (@cs) {
  136.     next unless ($update || $onlyupdate);
  137.     next unless (grep($_ eq $c, @category));
  138.     if (exists($ics->{$c})) {
  139.         printm("Skipping category $c; it's ignored.");
  140.         next;
  141.     }
  142.     
  143.     printm("Updating category $c..");
  144.     
  145.     next unless (exists($fobjs->{$c}));
  146.     
  147.     $fobj = $fobjs->{$c};
  148.     
  149.     @list = keys(%{$fobj->{cache_list}});
  150.     foreach $font (@list) {
  151.         @hints = split(' ', $fobj->{cache_list}->{$font});
  152.         
  153.         printv(" Updating $font...");
  154.         
  155.         &Debian::Defoma::Configure::call_1($fobj, $app, 'register',
  156.                            $c, $font, @hints);
  157.     }
  158.     }
  159.  
  160.     if ($purge) {
  161.     &Debian::Defoma::Configure::purge_script($app);
  162.     }
  163.     
  164.     term_all();
  165.     mylock(0);
  166.     exit 0;
  167. }
  168.  
  169. sub main {
  170.     my $command = shift;
  171.  
  172.     if ($command =~ /^(clean|update|purge|ignore)$/) {
  173.     com_app($command);
  174.     }
  175. }
  176.  
  177. 1;
  178.